/**
*  Copyright (c) 2011, Alex Theodoridis
*  All rights reserved.

*  Redistribution and use in source and binary forms, with 
*  or without modification, are permitted provided that the 
*  following conditions are met:
*  Redistributions of source code must retain the above 
*  copyright notice, this list of conditions and the following disclaimer.
*  Redistributions in binary form must reproduce the above 
*  copyright notice, this list of conditions and the following
*  disclaimer in the documentation and/or other materials 
*  provided with the distribution.

*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
*  AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
*  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
*  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
*  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
*  OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
*  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
*  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
*  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
*  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
*  ANY WAY OUT OF THE USE OF THIS SOFTWARE,
*  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
*/

#ifndef MYTRAININGEXECUTIONHANDLER_H_
#define MYTRAININGEXECUTIONHANDLER_H_
#include <NeuralNetwork/LearningAlgorithm/IAlgorithmListener.h>
#include <iostream>
#include "NNVar.h"

template<class Var>
class TrainingExecutionListener : public nn::IAlgorithmListener<Var>
{
public:
    TrainingExecutionListener
();
    virtual void onChangeEpoch ( const typename utils::SharedPtr<nn::PerceptronNeuralNetwork<Var> >& _perceptron, const Var& epochError );
    virtual ~TrainingExecutionListener
();
};

template<class Var>
TrainingExecutionListener
<Var>::TrainingExecutionListener
()
{
    // TODO Auto-generated constructor stub

}


template<class Var>
TrainingExecutionListener
<Var>::~TrainingExecutionListener
()
{
    // TODO Auto-generated destructor stub
}

template<class Var>
void TrainingExecutionListener
<Var>::onChangeEpoch ( const typename utils::SharedPtr<nn::PerceptronNeuralNetwork<Var> >& _perceptron, const Var& epochError )
{
    NNVar var=static_cast<NNVar> ( epochError );
    std::cout << var[0] << std::endl;
}


#endif /* MYTRAININGEXECUTIONHANDLER_H_ */
